﻿//----------------------------------------------------------------
// Desc: 
// Edit: ShowLong, http://blog.csdn.net/showlong
//
// Date Created: 2012-04-13
//
// Update Date : 
//
// Copyright (c) Fuel4D (http://www.fuel4d.com), All rights reserved.
//
//----------------------------------------------------------------
#pragma once


class IFMemObject
{
protected:
    explicit IFMemObject()
    {}

public:
    // 必须存在的虚析构
    virtual~IFMemObject()
    {}
    // 获取本对象的类名
    virtual const ACHAR* ClassName() = 0;
    // 获取本对象的类名HASH
    virtual FIDHASH ClassHash() = 0;
    // 判断当前对象是否与P是同一个类型的（完整匹配）
    virtual bool IsKind(IFMemObject* p){ return p->ClassHash() == this->ClassHash(); }
    // 测试是我自己是否是指定的类型（完整匹配）
    template< typename _Ty >
    FINLINE bool IsClass(){ return (FIDHASH)(DWORD_PTR)&_Ty::_StaticClassName == this->ClassHash(); }

    FDECLARE_NEW;
};